// 文件路径: src/stores/user.js
import { defineStore } from 'pinia'
import { userApi } from '@/api/user'

export const useUserStore = defineStore('user', {
  state: () => ({
    users: { list: [], pagination: {} }, // 将用户列表和分页信息组合
    currentUser: null, // 新增：存储当前用户信息
    loading: false,
    error: null
  }),

  actions: {
    // 获取用户列表（带分页）
    async fetchUsers(params = {}) {
      console.log('开始请求用户数据...')
      this.loading = true
      try {
        const response = await userApi.getUsers({
          page: params.page, // 让 API 调用处理默认值
          pageSize: params.pageSize,
          username: params.username
        });

        const resData = response.data?.data; // 后端返回 { list: [], pagination: {} }
        if (resData && resData.list && resData.pagination) {
          this.users = { // 直接存储后端返回的结构
             list: resData.list,
             pagination: resData.pagination
          };
           console.log('Users fetched:', this.users);
        } else {
             // 处理数据结构不符合预期的情况
             console.error("Unexpected data structure received for users:", response.data);
             this.users = { list: [], pagination: {} }; // 重置为默认空结构
        }
        this.error = null;
      } catch (err) {
        this.handleError(err); // 使用已有的错误处理
      } finally {
        this.loading = false;
      }
    },
    // 创建用户（管理员）
    async createUser(userData) {
      // 注意：这个 action 应该由管理员调用，userData 包含 username, password, role 等
      this.loading = true;
      try {
        await userApi.createUser(userData); // 调用 API
        await this.fetchUsers({ page: this.users.pagination.current_page || 1 }); // 创建后刷新当前页
        this.error = null;
        return true; // 表示成功
      } catch (err) {
        this.handleError(err);
        return false; // 表示失败
      } finally {
        this.loading = false;
      }
    },

    // 更新用户信息（管理员）
    async updateUser(userId, userData) {
      this.loading = true;
      try {
        await userApi.updateUser(userId, userData);
        // 更新后刷新当前页或第一页
        await this.fetchUsers({ page: this.users.pagination.current_page || 1 });
        this.error = null;
        return true;
      } catch (err) {
        this.handleError(err);
        return false;
      } finally {
        this.loading = false;
      }
    },

    // 删除用户（管理员）
    async deleteUser(userId) {
      this.loading = true;
      try {
        await userApi.deleteUser(userId); // 调用修正后的 API
        // 删除后刷新当前页或第一页
        await this.fetchUsers({ page: this.users.pagination.current_page || 1 });
        this.error = null;
        return true;
      } catch (err) {
        this.handleError(err);
        return false;
      } finally {
        this.loading = false;
      }
    },

    // 获取当前登录用户的信息
    async fetchCurrentUser() {
       this.loading = true;
       try {
          const response = await userApi.getCurrentUser();
          const resData = response.data?.data;
          if (resData) {
             this.currentUser = resData; // 存储用户信息
             this.error = null;
             return true;
          } else {
             this.error = '无法获取当前用户信息';
             return false;
          }
       } catch (err) {
          this.handleError(err); // 错误可能意味着未登录
          this.currentUser = null; // 获取失败则清空
          return false;
       } finally {
          this.loading = false;
       }
    },

    // 更新当前登录用户的信息 (例如修改密码)
    async updateCurrentUser(updateData) {
       this.loading = true;
       try {
           await userApi.updateCurrentUser(updateData);
           // 更新成功后可以重新获取用户信息
           await this.fetchCurrentUser();
           this.error = null;
           return true;
       } catch (err) {
           this.handleError(err); // 错误处理会显示消息
           return false;
       } finally {
           this.loading = false;
       }
    },

    // 统一错误处理
   handleError(error) {
      // 优先使用后端返回的 message
      this.error = error.response?.data?.message
                  || error.message
                  || '发生未知错误';
      console.error('User Store Error:', this.error, error.response || error);
    }
  },

  getters: {
    // 保持 pagination getter，但现在从 state.users.pagination 获取数据
    pagination: (state) => ({
      current: state.users.pagination?.current_page || 1,
      pageSize: state.users.pagination?.per_page || 20,
      total: state.users.pagination?.total_items || 0,
      totalPages: state.users.pagination?.total_pages || 0
    })
  }
});